The present invention concerns the construction of a bus nexus table and a method for efficient access of the data stored therein. The invention has particular application to the construction and access of a nexus table for a SCSI bus.
For busses that operate according to the SCSI protocol, I/O data transactions are initiated and controlled by an initiator, e.g., a personal computer, which is connected to a SCSI bus. Also connected to a SCSI bus are one or more targets. A target may be, for example, a hard disk drive, a tape back-up, a scanner, etc. According to presently implemented protocols, the total number of initiators and targets connected to a single SCSI bus is limited to either eight or sixteen.
Each target may have up to eight logic units. Each of the eight logic units may be separately addressed by an initiator.
When operating in accordance with the SCSI protocol, an initiator is required to manage multiple concurrent input/output (I/O) data transactions in various stages of completion. Data transactions are identified by the initiator through the use of target numbers statically assigned to each target and logic unit numbers statically assigned to each logic unit. Additionally, for data transactions, an initiator can dynamically assign up to 256 queue tags (Q tags) per logic unit. Theoretically, in a system which includes one initiator and seven targets, this allows an initiator to manage up to 14,336 concurrent I/O data transactions. In practice the number of concurrent I/O data transactions occurring at any one time is significantly less.
In order to manage multiple concurrent I/O data transactions, an initiator needs to store a current state of each data transaction. Typically this may be done by storing entries in a nexus table for each I/O data transaction in progress. However if an entry is reserved for all possible data transactions, the table would need 14,336 entries for a system with seven targets. In a system with fifteen targets, the number of required entries would increase to 30,720. While it is possible to build-and access such a nexus table, the amount of memory required makes such a large table undesirable.